package com.xr.miniprogram.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.xr.miniprogram.domain.MiniProgramOrder;
import com.xr.miniprogram.domain.vo.MiniProgramInsertOrderVO;
import com.xr.miniprogram.domain.vo.MiniProgramOrderVO;

import java.text.ParseException;
import java.util.List;

/**
 *  小程序订单服务
 */
public interface IMiniProgramOrderService extends IService<MiniProgramOrder> {

    /**
     * 创建订单 同时创建n个对应订单用户、服务日志、评论;
     * 订单状态、订单用户状态均为待支付;
     * 将订单加入延迟队列，进行支付倒计时;
     * @param miniProgramInsertOrderVO
     * @return
     * @throws Exception
     */
    Object add(MiniProgramInsertOrderVO miniProgramInsertOrderVO) throws Exception;

    /**
     * 根据id查询orderVO
     *
     * @param orderId order主键
     * @return order
     */
    public MiniProgramOrderVO selectMiniProgramOrderByOrderId(Long orderId);

    /**
     * 分页查询order列表
     *
     * @param miniProgramOrder order
     * @return order集合
     */
    public IPage<MiniProgramOrderVO> selectMiniProgramOrderList(Page<MiniProgramOrderVO> page, MiniProgramOrder miniProgramOrder, Long statusCode, Long uStatusId, String staffName);

    /**
     * 根据订单编号查询订单状态
     * @param orderNumber
     * @return
     */
    public MiniProgramOrder selectMiniProgramOrderByOrderNumber(String orderNumber);

    /**
     * 查询所有超时未支付的订单
     * @param minutes
     * @return
     * @throws Exception
     */
    List<MiniProgramOrder> getNoPay(int minutes) throws Exception;

    /**
     * 根据订单编号 改变订单状态为指定值 并对订单子项状态进行处理
     * 情况一：指定状态为服务中，则代表支付成功处理 （订单：待支付-->服务中) （订单用户：待支付-->待预约）
     * 情况二：指定状态为服务中，则代表取消退款处理（订单：退款审核中-->服务中) （订单用户：退款审核中-->待预约）
     * 情况三：修改订单、订单子项状态为指定状态
     * @param orderNo  订单编号
     * @param orderStatusId 状态id
     */
    void updateStatusByOrderNo(String orderNo, Long orderStatusId);
}
